home *** CD-ROM | disk | FTP | other *** search
/ Tiger Disk 6 / Tiger_Disk_006_19xx_Tiger-Crew-Disk_de_Side_B.d64 / 13 mk (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  7KB  |  181 lines

  1. 10 u$="[197][197][197][197][197][197][197][197][197][197]":o$="[164][164][164][164][164][164][164][164][164]":i$="input-routine":b$=" bildschirm"
  2. 20 v$=" verzoegerung":s$="schleife"
  3. 101 data 169,16,141,75,232,169,15,141,74,232,169,128,141,72,232,32,83,3
  4. 102 data 169,0,141,75,232,96,96,160,0,162,0,202,208,253,136,208,248,96
  5. 103 data 169,16,141,75,232,169,15,141,74,232,169,0,133,1,165,1,141,72,232,160
  6. 104 data 1,32,128,3,230,1,208,242,169,0,141,75,232,96,162,64,202,208,253,96
  7. 200 print"[147][164][164][164]";o$;o$;o$;o$:print"syntax-lehrgang 'maschinensprache' (13)
  8. 210 [153]"tototototototo";o$:[153]"4. zeit"s$"n
  9. 220 print"gelegentlich steht man vor dem problem,
  10. 230 [153]"ein programm  fuer eine  bestimmte zeit
  11. 240 print"verzoegern zu muessen.   in basic fuegt
  12. 250 [153]"man  im allgemeinen eine  warte"s$
  13. 260 [153]"ein.   wie warte"s$"n in maschinen-
  14. 270 print"programmen  ausgefuehrt werden  und wie
  15. 280 [153]"man ihre zeitliche dauer berechnet,wol-
  16. 290 print"len wir uns im folgenden ansehen.
  17. 300 [140]:[129]i[178]0[164]75:[135]x:[151]826[170]i,x:[130]
  18. 310 i[178]1:[141]5000:[139]fl[167]200
  19. 400 [153]"load"o$;o$;o$"toto"
  20. 410 [153]"4.1 kurze"v$"szeitenwait
  21. 420 print"sehen wir uns gleich ein beispiel an:
  22. 430 [153]"    ldx #$00  (2)
  23. 440 print"  [176][192]dex       (2)
  24. 450 [153]"  on(NULL)cmd/_bne $fd   (3)
  25. 460 print"    rts       (6)
  26. 470 [153]"die zahlen  in klammern hinterclose den be-
  27. 480 print"fehlen geben an,   wie viele taktzyklen
  28. 490 [153]"der befehl benoetigt.   bei einer takt-
  29. 500 print"frequenz von  1 mhz  dauert jeder  takt
  30. 510 [153]"eine mikrosekunde.
  31. 520 i=2:gosub5000:ifflthen200
  32. 600 print"[147]man sieht leicht,  dass hier  eine pro-
  33. 610 [153]"gramm"s$" ausgefuehrt wird.man wird
  34. 620 print"ebenfalls  sofort verstehen,   dass die
  35. 630 [153]"ausfuehrung  einer  solchen   programm-
  36. 640 prints$" eine gewisse zeit benoetigt.
  37. 650 [153]"in  dieser  "s$"  passiert   nichts
  38. 660 print"anderes, als dass das xr bis $00 dekre-
  39. 670 [153]"mentiert wird. der startwert ist (hier)
  40. 680 print"ebenfalls $00,   also wird die "s$
  41. 690 print"genau 256 mal durchlaufen.
  42. 720 i[178]3:[141]5000:[139]fl[167]400
  43. 800 [153]"loadjeder  "s$"ndurchlauf dauert  genau
  44. 810 print"2 + 3 = 5 taktzyklen. wenn die "s$
  45. 820 print"256 mal durchlaufen wird, so dauert das
  46. 830 [153]"also: 256 * 5 = 1280 taktzyklen.  hinzu
  47. 840 print"kommen noch etwa 10 zyklen fuer die an-
  48. 850 [153]"deren befehle,   insgesamt dauert diese
  49. 860 prints$" also ca 1290 zyklen.  das sind
  50. 870 [153]"1290 mikrosekunden bzw.  1.29 millisec.
  51. 880 print"waehlt man  als startwert  fuer  das xr
  52. 890 [153]"nicht $00,  sondern einen anderen wert,
  53. 900 print"so wird die zeit entsprechend kuerzer.
  54. 930 i[178]4:[141]5000:[139]fl[167]600
  55. 1000 [153]"loadmit welchem startwert erreicht man bei-
  56. 1010 print"spielsweise eine"v$"szeit  von
  57. 1020 [153]"1.0 msec ?
  58. 1030 print"loesung: 1 msec = 1000 mikrosec.
  59. 1040 [153]"hiervon  ziehen  wir  fuer die  befehle
  60. 1050 print"ausserhalb der "s$" ca 10 ab (=990)
  61. 1060 [153]"und teilen durch die zeit, die fuer je-
  62. 1070 print"den "s$"ndurchlauf  benoetigt wird:
  63. 1080 [153]"990/5 = 198.  dies ist die zahl der be-
  64. 1090 print"noetigten "s$"ndurchlaeufe fuer die
  65. 1100 [153]"gewuenschte"v$" von 1 msec.
  66. 1130 i=5:gosub5000:ifflthen800
  67. 1200 print"[147]der startwert fuer das xr ist also  198
  68. 1210 [153]"oder hexadezimal $c6.
  69. 1220 print""o$;o$;o$"[164][164]
  70. 1230 [153]"4.2 lange"v$"szeiten
  71. 1240 print"oft reicht  eine"v$"szeit  von
  72. 1250 [153]"nur maximal 1.3 msec nicht aus. in sol-
  73. 1260 print"chen faellen  wenden wir verschachtelte
  74. 1270 [153]s$"n an. wir betten unsere verzoe-
  75. 1280 print"gerungs"s$"  also  in  eine  zweite
  76. 1290 [153]s$" ein.  das sieht beispielsweise
  77. 1300 print"so aus:
  78. 1320 i[178]6:[141]5000:[139]fl[167]1000
  79. 1400 [153]"load     ldy #$00  (2)
  80. 1410 print"  [176][192][192]ldx #$00  (2)
  81. 1420 [153]"  (NULL)cmd(NULL)ortandex       (2) > (2+3)*256=1280on
  82. 1430 print"  [221][221][157][157][221][173]_bne $fd   (3)
  83. 1440 [153]"  (NULL)cmd(NULL)  dey       (2)
  84. 1450 print"  [221][157][173][192]_bne $f8   (3)
  85. 1460 [153]"     rts       (6)
  86. 1470 print"wie lange dauert diese "s$" ?
  87. 1480 [153]"loesung: die aeussere "s$" wird 256
  88. 1490 print"mal durchlaufen. jeder durchlauf dauert
  89. 1500 [153]"2 + 1280 + 2 + 3 = 1287 zyklen.
  90. 1530 i=7:gosub5000:ifflthen1200
  91. 1600 print"[147]die gesamtdauer ist also:
  92. 1610 [153]"2 + 1287 * 256 + 6 = 329480 taktzyklen.
  93. 1620 print"das sind immerhin schon 0.33 sec ! baut
  94. 1630 [153]"man diese routine  als unterprogramm in
  95. 1640 print"ein maschinenprogramm ein,  so kann man
  96. 1650 [153]"durch dreimaliges aufrufen also verzoe-
  97. 1660 print"gerungszeiten von 1 sec erreichen.
  98. 1670 [153]"im naechsten abschnitt  lernen wir eine
  99. 1680 print"moegliche anwendung kennen.
  100. 1710 i[178]8:[141]5000:[139]fl[167]1400
  101. 1800 [153]"load"o$;o$
  102. 1810 [153]"5.  tonausgang cb2
  103. 1820 print"aus basic-programmen  ist ihnen  sicher
  104. 1830 [153]"bekannt, dass ueber den ausgang cb2 des
  105. 1840 print"userports toene erzeugt werden koennen.
  106. 1850 [153]"in basic macht man das folgendermassen:
  107. 1860 print"1. poke 59467,16:rem cb2 einschalten
  108. 1870 [153]"2. poke 59466,15:rem signalform waehlen
  109. 1880 print"3. poke 59464,..:rem frequenz (0-255)
  110. 1890 [153]"4. ... warte"s$" (for ... next)
  111. 1900 print"5. poke 59467,0: rem cb2 ausschalten
  112. 1930 i[178]9:[141]5000:[139]fl[167]1600
  113. 2000 [153]"loaddas  setzen wir  einfach in  maschinen-
  114. 2005 x$="[192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]"
  115. 2010 print"sprache um:":printx$
  116. 2020 print"     lda #$10   (= dez. 16)
  117. 2040 [153]"1. < sta $e84b  (= dez. 59467)":[153]x$
  118. 2050 [153]"     lda #$0f   (= dez. 15)
  119. 2055 print"2. < sta $e84a  (= dez. 59466)":printx$
  120. 2060 print"     lda #$80   (= dez. 128)
  121. 2065 [153]"3. < sta $e848  (= dez. 59464)":[153]x$
  122. 2070 [153]"4.   jsr $....  (verzoegerungs"s$")":[153]x$
  123. 2080 [153]"     lda #$00   (= dez. 0)
  124. 2090 print"5. < sta $e84b  (= dez. 59467)":printx$
  125. 2100 print"     rts
  126. 2130 i[178]10:[141]5000:[139]fl[167]1800
  127. 2200 [153]"loaddie"v$" soll 0.33 sec sein.
  128. 2210 print"das programm steht im ram ab 826. hier
  129. 2220 [153]"eine demonstration:"[163]31)"totototototo
  130. 2230 print tab(30)"<return[146]>
  131. 2240 [161]x$:[139]x$[179][177][199](13)[167]2240
  132. 2250 [158]826
  133. 2260 [153]"nochmal (j/n) ?"
  134. 2270 [161]x$:[139]x$[178]""[167]2270
  135. 2280 [139]x$[178]"j" [167][153]"on               ononon":[137]2250
  136. 2290 [139]x$[179][177]"n"[167]2270
  137. 2300 [153]"nun wollen wir   das programm  aendern.
  138. 2310 print"es soll einen ton erzeugen, dessen fre-
  139. 2320 [153]"quenz  den ganzen  moeglichen  bereich
  140. 2330 print"ueberstreicht.  die ersten vier befehle
  141. 2340 [153]"bleiben unveraendert.
  142. 2350 i=11:gosub5000:ifflthen2000
  143. 2400 print"[147]   lda #$00
  144. 2410 [153]"   sta $01     (zwischenspeicher)
  145. 2415 print"   lda $01     (zwischenspeicher)
  146. 2416 [153]"   sta $e848   (= dez. 59464)
  147. 2420 print" [176][192]jsr $....   ("v$"s"s$")
  148. 2430 [153]" on(NULL)cmd(NULL) inc $01     (zwischenspeicher)
  149. 2440 print" [145][221][157][173]_bne $f8
  150. 2445 [153]"der inhalt von  59464  (frequenz)  wird
  151. 2450 print"256 mal um 1 erhoeht. wir waehlen dies-
  152. 2460 [153]"mal eine kuerzere"v$".
  153. 2510 i=12:gosub5000:ifflthen2200
  154. 2600 print"[147]auch hierfuer eine demonstration,aller-
  155. 2610 [153]"dings  rufen wir  die routine gleich 5
  156. 2620 print"mal hintereinander auf:
  157. 2630 [153][163]31)"ontotototototo":[153][163]30)"<returnwait>
  158. 2640 getx$:ifx$<>chr$(13)then2640
  159. 2650 fori=1to5:sys 862:next
  160. 2660 print"nochmal (j/n) ?"
  161. 2670 getx$:ifx$=""then2670
  162. 2680 ifx$="j" thenprint"[145]               [145][145]":goto2650
  163. 2690 ifx$<>"n"then2670
  164. 2691 print"aufgaben:
  165. 2692 [153]"1. wie lange dauert die suchroutine aus
  166. 2694 print"der letzten lektion ?
  167. 2696 [153]"2. probieren sie, das zwischenspeichern
  168. 2698 print"im letzten beispiel in die cpu zu ver-
  169. 2700 [153]"lagern (tip: yr,  aber vorsicht mit der
  170. 2702 print"warte"s$"!)
  171. 2710 [153]"- seite 13 -  <+> ontotototocmdcmdcmdcmdendewait <-> von vorne";
  172. 3060 [141]5020:[145]fl[137]0
  173. 3070 [153]"load":[128]
  174. 5000 [143] umblaettern
  175. 5010 [153]"  - seite";i;"-  <+> weiter  <-> zurueck";
  176. 5020 [129]i[178]0[164]11:[161]x$:[130]
  177. 5030 [161]x$:[139]x$[178]""[167]5030
  178. 5040 [139]x$[178]"+"[167]fl[178]0:[142]
  179. 5050 [139]x$[178]"-"[167]fl[178]1:[142]
  180. 5060 [137]5030
  181.